python logging¶
logging_sample.py¶
from logging import (
getLogger,
StreamHandler,
DEBUG
)
# logger
logger = getLogger(__name__)
handler = StreamHandler()
handler.setLevel(DEBUG)
logger.setLevel(DEBUG)
logger.addHandler(handler)
logger.debug('hello')
logger.info('hello')
logger.warn('hello')
logger.error('hello')
http://docs.python.jp/3/howto/logging.html#logging-flow¶
level¶
- DEBUG
- INFO
- ERROR
- FATAL
- CRITICAL
- WARN(WARNING)
advanced logging¶
http://docs.python.jp/3/howto/logging.html#advanced-logging-tutorial
- ロガーは、アプリケーションコードが直接使うインタフェースを公開します。
- ハンドラは、(ロガーによって生成された) ログ記録を適切な送信先に送ります。
- フィルタは、どのログ記録を出力するかを決定する、きめ細かい機能を提供します。
- フォーマッタは、ログ記録が最終的に出力されるレイアウトを指定します。
- ログイベント情報は LogRecord インスタンスの形で、
- logger, handler, filter, formatter の間でやりとりされます。
cookbook¶
http://docs.python.jp/3/howto/logging-cookbook.html#filters-contextual
handler¶
- StreamHandler(stream=)
- FileHandler(filename=)
- NullHandler
other¶
import logging.handlers
- WatchedFileHandler
- RotatingFileHandler
- TimedRotatingFileHandler
- SocketHandler
- DatagramHandler(UDP)
- SysLogHandler
- NTEventLogHandler
- SMTPHandler
- MemoryHandler
- HTTPHandler
- QueueHandler
- QueueListener
filter¶
http://docs.python.jp/3/library/logging.html#filter
フィルタ (Filter) は、ハンドラ や ロガー によって使われ、 レベルによって提供されるのよりも洗練されたフィルタリングを実現します。 基底のフィルタクラスは、ロガー階層構造内の特定地点の配下にあるイベントだけを許可します。 例えば、’A.B’ で初期化されたフィルタは、 ロガー ‘A.B’, ‘A.B.C’, ‘A.B.C.D’, ‘A.B.D’ 等によって記録されたイベントは許可しますが、 ’A.BB’, ‘B.A.B’ などは許可しません。 空の文字列で初期化された場合、すべてのイベントを通過させます。
format¶
logging.BASIC_FORMAT
'%(levelname)s:%(name)s:%(message)s'
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# http://docs.python.jp/3/library/logging.html#logrecord-attributes
handler¶
fh.setFormatter(formatter)
ch.setFormatter(formatter)
warnings ?¶
logging.warnings
<module 'warnings' from 'C:\\Anaconda3\\lib\\warnings.py'>
config¶
# http://docs.python.jp/3/library/logging.config.html
import logging.config
logging.config.fileConfig('config_file.conf')
example¶
from logging import (
getLogger,
Formatter,
FileHandler,
DEBUG
)
from pprint import pprint
## logger
logger = getLogger(__name__)
logrecord_attributes = [
'asctime', 'name', 'levelname', 'message',
'filename', 'funcName', 'lineno', 'module',
]
func = lambda x: '%({0})s'.format(x)
format = ' - '.join(list(map(func, logrecord_attributes)))
formatter = Formatter(format)
handler = FileHandler(filename='loggin_file_handle.log')
handler.setFormatter(formatter)
handler.setLevel(DEBUG)
logger.setLevel(DEBUG)
logger.addHandler(handler)
print(logger)
pprint(dir(logger))
pprint(logger.__dict__)
def log(msg):
logger.debug(msg + ' hello')
logger.info(msg + ' hello')
logger.warn(msg + ' hello')
logger.error(msg + ' hello')